home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_tuple.py < prev    next >
Text File  |  2005-10-18  |  3KB  |  84 lines

  1. import unittest
  2. from test import test_support, seq_tests
  3.  
  4. class TupleTest(seq_tests.CommonTest):
  5.     type2test = tuple
  6.  
  7.     def test_constructors(self):
  8.         super(TupleTest, self).test_len()
  9.         # calling built-in types without argument must return empty
  10.         self.assertEqual(tuple(), ())
  11.  
  12.     def test_truth(self):
  13.         super(TupleTest, self).test_truth()
  14.         self.assert_(not ())
  15.         self.assert_((42, ))
  16.  
  17.     def test_len(self):
  18.         super(TupleTest, self).test_len()
  19.         self.assertEqual(len(()), 0)
  20.         self.assertEqual(len((0,)), 1)
  21.         self.assertEqual(len((0, 1, 2)), 3)
  22.  
  23.     def test_iadd(self):
  24.         super(TupleTest, self).test_iadd()
  25.         u = (0, 1)
  26.         u2 = u
  27.         u += (2, 3)
  28.         self.assert_(u is not u2)
  29.  
  30.     def test_imul(self):
  31.         super(TupleTest, self).test_imul()
  32.         u = (0, 1)
  33.         u2 = u
  34.         u *= 3
  35.         self.assert_(u is not u2)
  36.  
  37.     def test_tupleresizebug(self):
  38.         # Check that a specific bug in _PyTuple_Resize() is squashed.
  39.         def f():
  40.             for i in range(1000):
  41.                 yield i
  42.         self.assertEqual(list(tuple(f())), range(1000))
  43.  
  44.     def test_hash(self):
  45.         # See SF bug 942952:  Weakness in tuple hash
  46.         # The hash should:
  47.         #      be non-commutative
  48.         #      should spread-out closely spaced values
  49.         #      should not exhibit cancellation in tuples like (x,(x,y))
  50.         #      should be distinct from element hashes:  hash(x)!=hash((x,))
  51.         # This test exercises those cases.
  52.         # For a pure random hash and N=50, the expected number of occupied
  53.         #      buckets when tossing 252,600 balls into 2**32 buckets
  54.         #      is 252,592.6, or about 7.4 expected collisions.  The
  55.         #      standard deviation is 2.73.  On a box with 64-bit hash
  56.         #      codes, no collisions are expected.  Here we accept no
  57.         #      more than 15 collisions.  Any worse and the hash function
  58.         #      is sorely suspect.
  59.  
  60.         N=50
  61.         base = range(N)
  62.         xp = [(i, j) for i in base for j in base]
  63.         inps = base + [(i, j) for i in base for j in xp] + \
  64.                      [(i, j) for i in xp for j in base] + xp + zip(base)
  65.         collisions = len(inps) - len(set(map(hash, inps)))
  66.         self.assert_(collisions <= 15)
  67.  
  68.     def test_repr(self):
  69.         l0 = tuple()
  70.         l2 = (0, 1, 2)
  71.         a0 = self.type2test(l0)
  72.         a2 = self.type2test(l2)
  73.  
  74.         self.assertEqual(str(a0), repr(l0))
  75.         self.assertEqual(str(a2), repr(l2))
  76.         self.assertEqual(repr(a0), "()")
  77.         self.assertEqual(repr(a2), "(0, 1, 2)")
  78.  
  79. def test_main():
  80.     test_support.run_unittest(TupleTest)
  81.  
  82. if __name__=="__main__":
  83.     test_main()
  84.